package main

import (
	"encoding/json"
	"fmt"
)

// 结构体和json转换

type person struct {
	// 如果首字母小写,不能在json.Marshal包里使用,会访问不到
	Name string
	Age  int
}

func main() {
	p1 := person{
		Name: "二狗",
		Age:  18,
	}
	// 序列化
	marshal, err := json.Marshal(p1)
	if err != nil {
		fmt.Printf("marshal failed, err:%v\n", err)
		return
	}
	fmt.Printf("%v\n", string(marshal)) // {"Name":"二狗","Age":18}

	// 反序列化
	str := `{"name":"三狗","age":28}`
	var p2 person
	json.Unmarshal([]byte(str), &p2) // 传指针是为了能在json.Unmarshal中修改p2的值
	fmt.Printf("%v\n", p2)           // {三狗 28}
}
